import { UserConfig, ConfigEnv, loadEnv } from 'vite';
import path from 'path';
import XEUtils from 'xe-utils';
import vue from '@vitejs/plugin-vue';
import vueJsx from '@vitejs/plugin-vue-jsx';
import { createHtmlPlugin } from 'vite-plugin-html';
import externalGlobals from 'rollup-plugin-external-globals';
import zipPack from 'vite-plugin-zip-pack';

// https://vitejs.dev/config/
export default ({ mode }: ConfigEnv): UserConfig => {
    const env = loadEnv(mode, process.cwd(), 'VITE_');
    return {
        plugins: [
            vue(),
            vueJsx(),
            createHtmlPlugin({
                inject: {
                    data: {
                        VITE_APP_BUILD_TIME: XEUtils.toDateString(new Date(), 'yyyy-MM-dd HH:mm:ss'),
                        ...env
                    }
                }
            }),
            zipPack({
                outDir: './'
            })
        ],

        resolve: {
            alias: {
                '@': path.join(__dirname, './src')
            },
            extensions: ['.js', '.vue', '.json', '.ts', '.tsx']
        },

        server: {
            port: 8085,

            // Tauri 工作于固定端口，如果端口不可用则报错
            strictPort: true,

            // 告诉 Vite 忽略监听 `src-tauri` 目录
            watch: {
                ignored: ['**/src-tauri/**'],
            },

            // 跨域配置
            cors: true,
            proxy: {
                "/api": {
                    // target: "http://localhost:8090/tools",
                    target: "http://119.23.144.149:8090/tools",
                    secure: false,
                    changeOrigin: true,
                    rewrite: (path) => {
                        console.log("Path:", path);
                        // 后端接口如果需要 /api 则不需要移除 /api, 如果不需要则需要移除
                        return path.replace(/^\/api/, '');
                    }
                },
            }
        },

        build: {
            rollupOptions: {
                // 不打包依赖
                external: ['echarts'],
                plugins: [
                    // 不打包依赖映射的对象
                    externalGlobals({
                        echarts: 'echarts'
                    })
                ]
            },

            // Tauri 在 Windows 上使用 Chromium，在 macOS 和 Linux 上使用 WebKit
            target: process.env.TAURI_ENV_PLATFORM == 'windows'
                ? 'chrome105'
                : 'safari13',

            // 在 debug 构建中不使用 minify
            minify: !process.env.TAURI_ENV_DEBUG ? 'esbuild' : false,

            // 在 debug 构建中生成 sourcemap
            sourcemap: !!process.env.TAURI_ENV_DEBUG,
        },

        // 防止 Vite 清除 Rust 显示的错误
        clearScreen: false,

        // 添加有关当前构建目标的额外前缀，使这些 CLI 设置的 Tauri 环境变量可以在客户端代码中访问
        envPrefix: ['VITE_', 'TAURI_ENV_*'],
    };
}
